package edu.kit.csl.cratylus.extraction;

import java.util.List;

import edu.kit.csl.cratylus.datatypes.Candidate;

/**
 * The splitter is among the planner, the merger, and the updater one of the
 * major logical modules. This module is responsible to refine the corpus
 * segmentation suggested by the planner. Even though the initial guesses of
 * the planner should be quiet accurate, refinement may be necessary. For 
 * example, if the planner aggregates all target words aligned to the same
 * source language word, errors occur as soon as this source word is 
 * represented by multiple words in the target language. The task of the 
 * splitter is to subdivide the candidate clusters of the planner and prevent
 * the merger from merging phoneme sequences which actually represent multiple
 * target words.<br>
 * By contract, splitter do not get empty candidate groups, and they do not
 * generate empty clusters
 * 
 * @see Planner
 * @see Merger
 */
public interface Splitter {

	/**
	 * Split a group of candidates into smaller pieces, which matches the
	 * linguistic entities behind more accurately.
	 * 
	 * @param candidates target words candidates from the planner
	 * @return subdivided set
	 */
	List<List<Candidate>> split(List<Candidate> candidates);
}
